package io;

import java.io.*;

/**
 * 使用缓冲流完成文件复制
 */
public class CopyDemo3 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("image.png");
        BufferedInputStream bis = new BufferedInputStream(fis,1024*10);
        FileOutputStream fos = new FileOutputStream("image_cp3.png");
        BufferedOutputStream bos = new BufferedOutputStream(fos,1024*10);
        int d;
        /*
            缓冲字节输入流内部默认有一个8192(8kb 1024*8  可通过构造器调整)长的字节数组，
            当我们第一次调用缓冲字节输入流的read方法读取一个字节时，缓冲字节输入流则会要求
            下面的流一次性读取8192个字节，然后把读取到的字节放到缓冲字节输入流的内部字节数组中，
            并返回去第一字节。
            当再次调用read方法时，缓冲字节输入流会返回内部字节数组中下一个字节，

            因此缓冲流的作用就是将读写操作统一转换为块读写来保证读写效率的
         */
        while((d = bis.read())!=-1){
            bos.write(d);
        }
        System.out.println("复制完毕");
        bos.close();
        bis.close();
    }
}
